我面临的问题如下.我有一个源文档src.pdf.
我需要将src.pdf的内容插入到target.pdf中,旋转n度,其中n不是90的倍数.
任何帮助将不胜感激,谢谢.
编辑1:
PDF不包含注释.
我可以使用任何依赖于实用程序的解决方案,或编写我自己的代码,最好是在C#/ Python/Ruby/Perl中,但不限于语言.
该平台是Windows Server 2008 R2,我更喜欢坚持现有服务器,但Linux也是一种选择.最新(稳定)GhostScript和pdftk已经安装.
Rem*_*y F 12
如果新语言不是问题,LateX可能是一个选项.您可以在tex文件中包含pdf作为图形,并且您将能够使用重新缩放和旋转功能等专用选项.然后,编译它以获得新的pdf.以下非常简单的代码适用于我:
\documentclass[a4paper]{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[scale=0.5,angle=10]{test.pdf}
\end{document}
Run Code Online (Sandbox Code Playgroud)
从这个pdf:

我得到了这个新的:

然而,它需要一些手动的调整来获得你想要的......
由于您不必处理注释,因此您可以尝试使用您选择的任何 PDF 库,这些库允许您分解 PDF 词典并解码页面内容。获取页面内容后,可以在页面开头插入一个变换矩阵:[ cos ? 罪??罪?cos ? 0 0 ]
我建议您查看Adobe的PDF 参考文档,特别是有关转换矩阵的部分。
例如,如果您有以下页面内容对象 (40 0 obj):
10 0 obj % Page object
<< /Type /Page
/Parent 5 0 R
/Resources 20 0 R
/Contents 40 0 R
>>
endobj
40 0 obj % Page content
BT
/F1 1 Tf
12 0 0 12 100 600 Tm
(Hello) Tj
ET
endobj
Run Code Online (Sandbox Code Playgroud)
并且您想将整个页面旋转 45 度,假设 cos(45)=sin(45)=0.7,您生成的页面内容将是:
40 0 obj
0.7 0.7 -0.7 0.7 0 0 cm
BT
/F1 1 Tf
12 0 0 12 100 600 Tm
(Hello) Tj
ET
endobj
Run Code Online (Sandbox Code Playgroud)
添加完转换矩阵后,您可以重新编写 PDF 文件。您选择的库随后应根据需要添加压缩过滤器和编码过滤器。
例如,iText 可以分解和重组 PDF 文件。有关详细信息,请参阅方法 PdfReader.getPageContent。
这是一个示例,说明如何使用Java和iText库执行此操作.由于C#和iTextSharp代码应该可以使用的代码变化很小,因此提供样本@neo无法在他的答案中提供短时间通知.
样本取第一页source.pdf并将其插入target.pdf所有30°的倍数,即2*pi/12,但由于该角度在代码中明确给出,您可以旋转任何角度.
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("target.pdf"));
document.open();
PdfReader origPdfReader = new PdfReader("source.pdf");
PdfImportedPage importedPage = writer.getImportedPage(origPdfReader, 1);
PdfContentByte canvas = writer.getDirectContent();
for (int i = 0; i < 12; i++)
{
AffineTransform transform = AffineTransform.getRotateInstance(Math.PI * i / 6.0,
importedPage.getWidth() / 2, importedPage.getHeight() / 2);
canvas.addTemplate(importedPage, transform);
document.newPage();
}
document.close();
Run Code Online (Sandbox Code Playgroud)
根据您的使用情况,您不仅可以旋转(按照您的要求),还可以将其缩小以适合页面.在这种情况下,只需transform.scale(scaleX, scaleY)在使用之前添加transform.
您可以使用TexLive这样做:
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={-},angle=30]{main}
\end{document}
Run Code Online (Sandbox Code Playgroud)
它会旋转整个pdf - 每一页!
我不是那个想出来的人,但是 - 检查这个帖子是否有原始解决方案(给那个人一点!)
| 归档时间: |
|
| 查看次数: |
5988 次 |
| 最近记录: |