7

私が直面している問題は次のとおりです。ソース ドキュメント src.pdf があります。

src.pdf の内容を target.pdf に挿入し、n度回転させる必要があります。nは 90 の倍数ではありません。

どんな助けでも感謝します、ありがとう。

編集1:

PDF には注釈が含まれていません。

ユーティリティに依存する任意のソリューションを使用したり、できれば C#/Python/Ruby/Perl で独自のコードを記述したりできますが、言語に限定されません。

プラットフォームは Windows Server 2008 R2 です。私は既存のサーバーに固執することを好みますが、Linux もオプションです。最新の (安定した) GhostScript と pdftk が既にインストールされています。

4

5 に答える 5

15

新しい言語が問題にならない場合は、LateX がオプションになる可能性があります。pdf を Figure として tex ファイルに含めることができ、リスケーリングや回転機能などの専用オプションを使用できるようになります。次に、それをコンパイルして新しい pdf を取得します。非常に単純な次のコードが機能します:

\documentclass[a4paper]{article} 
\usepackage{graphicx}

\begin{document}

\includegraphics[scale=0.5,angle=10]{test.pdf} 

\end{document}

このpdfから:

力

私はこの新しいものを手に入れます:

ここに画像の説明を入力

ただし、必要なものを正確に取得するには、手動で調整する必要があります...

于 2012-11-27T17:06:20.580 に答える
6

これは、Java と iText ライブラリを使用してそれを行う方法を示す例です。コードを C# および iTextSharp でも使用できるようにするための最小限の変更を行うと、@neo は彼の回答ですぐに提供できなかったサンプルを提供できませんでした。

サンプルは の最初のページを取得し、30° のすべての倍数、つまり 2*pi/12 にsource.pdf挿入しますtarget.pdfが、その角度はコードで明示的に指定されているため、任意の角度で回転できます。

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();

ユースケースによっては、(要求どおりに) 回転するだけでなく、ページに合わせて縮小することもできます。その場合は、transform.scale(scaleX, scaleY)を使用する前に追加するだけtransformです。

于 2012-11-28T09:11:36.493 に答える
6

注釈を処理する必要がないため、PDF 辞書を分解してページ コンテンツをデコードできる任意の PDF ライブラリを使用してみることができます。ページのコンテンツを取得したら、ページの先頭に変換行列を挿入できます: [ cos θ sin θ −sin θ 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

cos(45)=sin(45)=0.7 と仮定して、ページ全体を 45 度回転すると、結果のページ コンテンツは次のようになります。

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

変換マトリックスの追加が完了したら、PDF ファイルを再構成できます。選択したライブラリは、必要に応じて圧縮フィルターとエンコード フィルターを追加する必要があります。

たとえば、iText は PDF ファイルを分解および再構成できます。詳細については、メソッド PdfReader.getPageContent を参照してください。

于 2012-11-27T16:08:08.507 に答える
4

私はこれを行うことができるいくつかのソフトウェアを書きました:

cpdf -rotate-contents 45 in.pdf -o out.pdf

コマーシャル、恐れ入ります。マニュアルの第 3 章を参照してください。

于 2012-11-27T15:36:52.267 に答える