2011-03-30 770 views
0

我使用ASP.NET(Framework 3.5)和Crystal Reports生成My College的学生的身份证,但我想在透明表格中打印卡并将其粘贴到一张相同尺寸的塑料卡片,以便我需要打印所有要打印的镜像。 我试着用镜像的形式设计水晶报告,但是找不到写镜像文本的方法。任何人都可以建议一种方法来完成这项工作,我想要的只是翻转PDF文件或Crystal Report中的内容。镜像(翻转)打印PDF文件

回答

0

一对夫妇思想:

1)渲染PDF到图像(使用的Ghostscript/ImageMagick的或商业的PDF库((例如TIF)和镜像图像打印

2)镜像的PDF本身,也许有可能与iTextSharp的

3)使用报告工具,并尝试使用某种反向字体(coud快选项)

0

任何API,让您导入页面,并直接写入PDF内容流会让你做这个。

在iText的(JAVA),它会是这个样子:

PdfReader reader = new PdfReader(pdfPath); 
Document doc = new Document(); 
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(outPath)); 

for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); ++pageNum) { 
    PdfImportedPage page = writer.getImportedPage(reader, pageNum); 
    PdfContentByte pageContent = writer.getDirectContent(); 

    // flip around vertical axis 
    pageContent.addTemplate(page, 1f, 0f, 0f, -1f, page.getWidth(), 0f); 
    doc.newPage(); 
} 

上面的代码进行以下屁股-U-ME-ptions:

  • 默认Document()页大小与当前PdfImportedPage的大小相匹配。
  • 源页面不旋转。
  • 没有注释,可选内容组(层)以及其他不是只是在页面内容中表示的位。

一些解决方法:

// keep the page size consistent 
PdfImportedPage page = writer.getImportedPage(reader, pageNum); 
doc.newPage(page.getBoundingBox()); 

PdfContentByte pageContent = writer.getDirectContent(); 
pageContent.addTemplate(...); 

// to compensate for a page's rotation, you need to either rotate the target page 
// Easy in PdfStamper, virtually impossible with `Document`/`PdfWriter`. 
AffineTransform unRotate = AffineTranform.getRotateInstance(degToRad(360 - pageRotation), pageCenterX, pageCenterY) 
AffineTransform flip = new AffineTransform(1f, 0f, 0f, -1f, page.getWidth(), 0f); 
AffineTransform finalTrans = flip; 
finalTrans.concatenate(unRotate); 

pageContent.addTemplate(page, finalTrans); 

公平的警告:我的二维矩阵福是不是所有的强。我几乎肯定会做错事。调试这些东西是一个真正的PITA。东西要么“看起来是正确的”,要么是完全搞砸了它的页面(ergo隐形,所以你不知道它走的是哪条路)。我经常通过[-1000 -1000 1000 1000]更改页面矩形,以便我可以看到它的全部内容。好玩的东西。

至于复制注释等......哎。 PdfCopy通过它的addPage()方法为你做了所有这些工作,但是这不会让你首先转换页面内容。您对PdfImportedPage所做的任何更改都将被忽略。你真的被困在艰难的路上......手动复制所有的烦人的比特,并改变它们以补偿你翻转的页面......或者将源码搞乱到addPage()以获得你想要的结果。两者都需要对PDF有深入的了解。

考虑到具体情况,您可能不需要担心它,但值得一提的是,如果有不同情况的人出现相同的目标。