java - 删除 PdfName.Rotate 值而不旋转
问题描述
我必须将多个文件中的多个页面组合成一个新的 PDF。所有页面的页面方向必须是纵向的。
完成这项工作后,我正在使用几个程序将旋转重置为零,而无需真正旋转页面。
我想使用 itext 删除旋转值。
取自 itext 示例,我尝试过这样的事情:
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(DEST));
int n = pdfDoc.getNumberOfPages();
PdfPage page;
PdfNumber rotate;
for (int p = 1; p <= n; p++) {
page = pdfDoc.getPage(p);
rotate = page.getPdfObject().getAsNumber(PdfName.Rotate);
page.setRotation(0);
pdfDoc.close();
}
}
这:
PdfDictionary diccionario = page.getPdfObject();
diccionario.Remove(iText.Kernel.Pdf.PdfName.Rotate);
并且CopyPagesTo
具有相同结果的功能:页面方向已更改。
这里有一个 0、90、180 y 270 度的示例文件。
目标是将所有页面的旋转值设置为零保持纵向模式:
https://filebin.ca/4vep0uuU1p2s/1.pdf
任何建议将不胜感激。
解决方案
我找到了使用该SetIgnorePageRotationForContent
功能的解决方案。
我很抱歉,但并不感到惊讶。这不是 C#,这不是 Java,而是 vb.net。
Dim srcPdf As iText.Kernel.Pdf.PdfDocument = New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfReader(srcFile))
Dim destPDF As New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfWriter(destFile))
For contador = 1 To srcPdf.GetNumberOfPages
Dim srcPage = srcPdf.GetPage(contador)
Dim rotacion As iText.Kernel.Pdf.PdfNumber = srcPage.GetPdfObject().GetAsNumber(iText.Kernel.Pdf.PdfName.Rotate)
If IsNothing(rotacion) OrElse rotacion.IntValue = 0 Then
srcPdf.CopyPagesTo(contador, contador, destPDF)
Continue For
End If
Dim destPage As iText.Kernel.Pdf.PdfPage = destPDF.AddNewPage(New iText.Kernel.Geom.PageSize(srcPage.GetPageSizeWithRotation))
If rotacion.IntValue = 180 Then
destPage.GetPdfObject().Put(iText.Kernel.Pdf.PdfName.Rotate, New iText.Kernel.Pdf.PdfNumber(180))
Else
destPage.GetPdfObject().Put(iText.Kernel.Pdf.PdfName.Rotate, New iText.Kernel.Pdf.PdfNumber(rotacion.IntValue + 180))
End If
destPage.SetIgnorePageRotationForContent(True)
Dim canvas As New iText.Kernel.Pdf.Canvas.PdfCanvas(destPage)
Dim pageCopy As iText.Kernel.Pdf.Xobject.PdfFormXObject = srcPage.CopyAsFormXObject(destPDF)
canvas.AddXObject(pageCopy, 0, 0)
destPage.GetPdfObject().Remove(iText.Kernel.Pdf.PdfName.Rotate)
Next
destPDF.Close()
srcPdf.Close()
谢谢。
推荐阅读
- python-3.x - 在 Django 3.2 中,如何使用数组中的值初始化构造函数中的 ManyToMany 字段?
- laravel - Laravel 8:尝试在 null 上读取属性“id”
- javascript - Lerna 发布工作流程未按预期发布
- azure - 逻辑应用失败,但 ADF 中调用此逻辑应用的 Web 活动具有成功状态
- postgresql - 在 SQL (PGadmin) 中更改列类型不起作用
- c - (Game Boy Advance) 程序从 0x00000000 而不是 0x08000000 开始。如何告诉 gcc 编译到特定地址?
- flutter - Android Studio - 如何在 Flutter 项目中启用 Kotlin 文档?
- javascript - 用数组元素填充空白
- javascript - 有什么方法可以在不重新启动动画的情况下通过 element.animate 更新动画集的持续时间?
- python - 安装 passlib 的问题