首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >镜像(翻转)打印PDF文件

镜像(翻转)打印PDF文件
EN

Stack Overflow用户
提问于 2011-03-30 15:05:45
回答 2查看 2.6K关注 0票数 0

我使用ASP.NET (Framework3.5)和水晶报表在一个PDF文件中生成我的学院的学生身份证,但我想打印在一个透明的工作表,并粘贴在一个相同大小的塑料卡上,我需要的一切都打印镜像。我试着用镜像形式设计水晶报表,但找不到一种用镜像形式书写文本的方法。谁能建议一种方法来做这项工作,所有我想要的是翻转PDF文件或在水晶报告的内容。

EN

回答 2

Stack Overflow用户

发布于 2011-03-30 16:33:34

以下是几个想法:

1)将PDF渲染为图像(使用Ghostscript/ImageMagick或商业PDF库(例如Tif)并镜像图像以进行打印

2)镜像PDF本身,也许可以使用iTextSharp

3)使用报告工具,并尝试使用某种反转字体(可以是快速选项)

票数 0
EN

Stack Overflow用户

发布于 2011-03-31 04:42:30

任何允许您导入页面并直接写入PDF内容流的API都将允许您这样做。

在iText (Java)中,它看起来像这样:

代码语言:javascript
复制
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();
}

上面的代码做了以下的修改:

  • 默认的Document()页面大小与当前未旋转的源页面的大小匹配。
    • 没有批注、可选的内容组(层)以及页面内容中未显示的各种其他位。

一些解决方法:

代码语言:javascript
复制
// 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);

警告:我的2维矩阵-fu并不是那么强大。我几乎肯定做错了什么。调试这些东西真的是一件很麻烦的事情。这些东西要么“看起来很好”,要么完全从页面上消失了(因此看不见,所以你不知道它是怎么回事)。我经常将页面矩形更改为-1000 -1000 1000 1000,这样我就可以看到所有内容的去向。有趣的东西。

至于复制注释等等..。唉哟。PdfCopy通过它的addPage()方法为您完成了所有这些工作,但这并不能让您首先转换页面内容。对PdfImportedPage所做的任何更改都将被忽略。你真的被困在了艰难的道路上...手动复制所有繁琐的部分,并对它们进行更改以补偿翻转的页面...或者修改addPage()的源代码以获得您想要的结果。两者都需要对PDF有一些深入的了解。

考虑到细节,你可能不需要担心它,但值得一提的是,如果有人有不同的情况,有相同的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5483020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档