- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 iTextSharp 创建一个由现有 PDF 集合组成的 PDF,其中一些包含的 PDF 是横向的,需要旋转。因此,我执行以下操作:
private static void AdjustRotationIfNeeded(PdfImportedPage pdfImportedPage, PdfReader reader, int documentPage)
{
float width = pdfImportedPage.Width;
float height = pdfImportedPage.Height;
if (pdfImportedPage.Rotation != 0)
{
PdfDictionary pageDict = reader.GetPageN(documentPage);
pageDict.Put(PdfName.ROTATE, new PdfNumber(0));
}
if (width > height)
{
PdfDictionary pageDict = reader.GetPageN(documentPage);
pageDict.Put(PdfName.ROTATE, new PdfNumber(270));
}
}
这很好用。如果需要,包含的 PDF 会旋转为纵向。 PDF 可以在我的本地打印机上正确打印。
此文件已发送至履行机构,不幸的是,包含景观的文件在经过打印机和光栅化过程时无法正确打印。他们使用 Kodak (Creo) NexRip 11.01 或 Kodak (Creo) Prinergy 6.1。机器。履行机构的建议是:“在我们旋转页面或对 PDF 进行任何更改后生成一个新的 PDF 文件。这就像导出到 PostScript 并提炼回 PDF 一样简单。”
我知道 iTextSharp 不支持 PostScript。 iTextSharp 是否有另一种方法可以旋转包含的 PDF 以在光栅化时保持方向?
最佳答案
首先让我向您保证,更改页面字典中的旋转是实现您想要的目标的正确过程。据我所见,您的代码没有任何问题。你做对了。
不幸的是,您面对的是您无法控制的第三方产品,它没有做正确的事情。如何解决?
我写了一个例子叫IncorrectExample .我这样命名它是因为我不希望它在与您不同的上下文中使用。您可以安全地忽略我添加的所有警告:它们不适合您。此示例非常针对您的问题。
请尝试以下代码:
public void manipulatePdf(String src, String dest)
throws IOException, DocumentException {
// Creating a reader
PdfReader reader = new PdfReader(src);
// step 1
Rectangle pagesize = getPageSize(reader, 1);
Document document = new Document(pagesize);
// step 2
PdfWriter writer
= PdfWriter.getInstance(document, new FileOutputStream(dest));
// step 3
document.open();
// step 4
PdfContentByte cb = writer.getDirectContent();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
pagesize = getPageSize(reader, i);
document.setPageSize(pagesize);
document.newPage();
PdfImportedPage page = writer.getImportedPage(reader, i);
if (isPortrait(reader, i)) {
cb.addTemplate(page, 0, 0);
}
else {
cb.addTemplate(page, 0, 1, -1, 0, pagesize.getWidth(), 0);
}
}
// step 4
document.close();
reader.close();
}
public Rectangle getPageSize(PdfReader reader, int pagenumber) {
Rectangle pagesize = reader.getPageSizeWithRotation(pagenumber);
return new Rectangle(
Math.min(pagesize.getWidth(), pagesize.getHeight()),
Math.max(pagesize.getWidth(), pagesize.getHeight()));
}
public boolean isPortrait(PdfReader reader, int pagenumber) {
Rectangle pagesize = reader.getPageSize(pagenumber);
return pagesize.getHeight() > pagesize.getWidth();
}
我参加了pages.pdf文件为例。这个文件的特殊之处在于它有两个以不同方式创建的横向页面:
/Rotate
值为 90
添加到页面字典中,它以横向显示。在我的示例中,我使用类 Document
和 PdfWriter
创建原始文档的副本。这是错误的一般,因为它丢弃了所有交互。我应该改用 PdfStamper
或 PdfCopy
,但在您的特定情况下是正确的,因为您不需要交互性: PDF 将被打印。
在 Document
中,我使用新的 Rectangle
创建新页面,它使用现有页面尺寸的最小值作为宽度,使用最大值作为高度.这样,页面将始终为纵向。请注意,我使用 getPageSizeWithRotation()
方法来确保获得正确的宽度和高度,同时考虑到任何可能的旋转。
然后我将 PdfImportedPage
添加到作者的直接内容中。我使用 isPortrait()
方法来确定是否需要旋转页面。请注意,isPortrait()
方法在 考虑旋转的情况下查看页面大小。如果我们确实考虑了旋转,我们会旋转不需要旋转的页面。
生成的 PDF 可在此处找到:pages_changed.pdf
如您所见,一些信息丢失了:最后一页上有一个注释:它不见了。为原始文档定义了特定的查看器首选项:它们已经消失了。但这在您的具体情况下应该无关紧要,因为对您来说重要的是页面打印正确。
关于pdf - 当文件在打印厂光栅化时,iTextSharp 旋转的 PDF 页面恢复方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332692/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!