我正在尝试使用 PDF 进行盖章,需要将其旋转 90 度才能正确放置?有人知道怎么做吗?网上好像找不到。
Rotate90Degrees 示例使用
PdfReader
获取文档的实例,然后更改每个页面字典中的 /Rotate
值。如果没有这样的条目,则会添加值为 /Rotate
的 90
条目:
final PdfReader reader = new PdfReader(source);
final int pagesCount = reader.getNumberOfPages();
for (int n = 1; n <= pagesCount; n++) {
final PdfDictionary page = reader.getPageN(n);
final PdfNumber rotate = page.getAsNumber(PdfName.ROTATE);
final int rotation =
rotate == null ? 90 : (rotate.intValue() + 90) % 360;
page.put(PdfName.ROTATE, new PdfNumber(rotation));
}
完成后,我们使用
PdfStamper
来保存更改:
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
这是针对 iText Java 的。对于 iTextSharp,将 Java 移植到 C# 很容易,因为术语是相同的。将一些小写字母更改为大写字母,如下所示:
PdfDictionary page = reader.GetPageN(1);
page.Put(PdfName.ROTATE, new PdfNumber(90));
本文的问题部分有一个或多或少相同的代码片段:如何使用 iTextSharp 旋转 PDF 页面而不导致 Ghostscript 错误?
对于 C# 程序员:
我用 C# 代码替换了 Bruno 的答案:
是的,它的工作就像一个魅力,你也可以将旋转数更改为 180,270 等
PdfReader reader = new PdfReader("Source.pdf");
int pagesCount = reader.NumberOfPages;
PdfDictionary page = reader.GetPageN(1);
PdfNumber rotate = page.GetAsNumber(PdfName.ROTATE);
page.Put(PdfName.ROTATE, new PdfNumber(90));
FileStream fs = new FileStream("created.pdf", FileMode.Create,
FileAccess.Write, FileShare.None);
PdfStamper stamper = new PdfStamper(reader, fs);
基于此页面https://blog.fileformat.com/pdf/rotate-pdf-in-csharp-using-itextpdf/
using var ms = new MemoryStream();
await using var pdfWriter = new PdfWriter(ms);
using var pdfms = new MemoryStream(blobFile.Content);
var document = new PdfDocument(new PdfReader(pdfms), pdfWriter);
for (int i = 1; i <= document.GetNumberOfPages(); i++)
{
var page = document.GetPage(i);
int rotate = page.GetRotation();
if (rotate == 0)
{
page.SetRotation(90);
}
else
{
page.SetRotation((rotate + 90) % 360);
}
}
document.Close();
pdfms.Close();
var pdfContent = ms.ToArray();
return pdfContent;