3

1つの画像のPDFにビットマップの2つのインスタンスを配置する方法はありますか?1つは画面に表示されたときに表示され、もう1つは印刷されたときに表示されますか?

私たちが抱えている問題は、チャートをビットマップにレンダリングすることです。300 dpiを実行すると、軸線や境界線などが消えます。96 dpiを実行すると、印刷が悪く見えます。

ありがとう-デイブ

4

5 に答える 5

5

これを行うには、オプションのコンテンツを使用できます。「印刷」イベントを使用アプリケーション ディクショナリに提供すると、コンテンツが印刷に適したものになります。(すべての印刷アプリケーションがこれを受け入れるわけではないことに注意してください)。

私の 1.7 版のセクション 4.10 の「オプションのコンテンツ」の 364 ページから始まる PDF リファレンス マニュアルを参照してください。

于 2013-02-08T08:33:29.083 に答える
1

印刷に使用する画像を指定できる代替画像辞書( PDF 仕様、セクション 8.9.5.4) を追加できます。

于 2013-02-08T10:34:35.047 に答える
0

はい、わかりませんが、方法はあります。同僚のいたずらとして使用しました。ドキュメントを印刷すると、まったく別の写真が表示されました。

于 2013-02-08T00:50:01.753 に答える
0

2つの読み取り専用テキストボックスフィールドを使用して、フィールドの外観に画像を描画することもできます。次に、一方のフィールドの可視性をVisibleNonPrintableに設定し、もう一方のフィールドの可視性をHiddenButPrintableに設定します。

于 2013-02-08T10:23:23.417 に答える
0

これを実装しました(iTextを使用)。これらを必要とする他の人のために、ここにコードがあります。ソースは私のブログからダウンロードできます

    static void Main(string[] args)
    {
        Document document = new Document(new Rectangle(0, 0, 8.5f * 72.0f, 11 * 72));
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Path.GetFullPath(@"..\..\test_dotnet.pdf"), FileMode.OpenOrCreate, FileAccess.ReadWrite));
        document.Open();

        document.Add(new Paragraph("Visibility test"));


        // not displayed on printer
        PdfLayer layer = new PdfLayer("screen", writer);
        layer.OnPanel = false;
        layer.SetPrint("Print", false);
        layer.View = true;

        PdfContentByte cb = writer.DirectContent;
        cb.BeginLayer(layer);

        Image img = Image.GetInstance(Path.GetFullPath(@"..\..\building_01.png"));
        img.SetAbsolutePosition(72, 72 * 7);
        cb.AddImage(img);

        cb.EndLayer();


        // not displayed on screen
        layer = new PdfLayer("print", writer);
        layer.OnPanel = false;
        layer.SetPrint("Print", true);
        layer.View = false;

        cb = writer.DirectContent;
        cb.BeginLayer(layer);

        img = Image.GetInstance(Path.GetFullPath(@"..\..\building_02.png"));
        img.SetAbsolutePosition(72, 72 * 3);
        cb.AddImage(img);

        cb.EndLayer();


        document.Close();

        Console.Out.WriteLine("all done");
    }
于 2013-02-24T15:35:22.983 に答える