3

すでに任意のPDFに透かしを入れることができ、中の画像はすべて問題ありませんが、PDFが印刷されたときにのみ透かしを表示する必要があります...これは可能ですか?どのように?

もちろん、これはプログラムで行う必要があります。

4

4 に答える 4

8

将来の読者のために、透かしをPDF レイヤー(オプションのコンテンツ グループ) にラップし、このレイヤーの使用属性を印刷専用として構成することで、これを行うことができます。詳細については、PDF リファレンス ドキュメントの第 4 章-グラフィックス、パート 4.10 -オプションのコンテンツを参照してください。

于 2012-04-06T13:49:05.490 に答える
2

具体的には、itextsharp を使用して、具体的には、pdf バージョン 1.7 と SetPrint("Watermark",true) で動作させることができました。

        string oldfile = @"c:\temp\oldfile.pdf";
        string newFile = @"c:\temp\newfile.pdf";
        PdfReader pdfReaderS = new PdfReader(oldfile);
        Document document = new Document(pdfReaderS.GetPageSizeWithRotation(1));
        PdfWriter pdfWriterD = PdfWriter.GetInstance(document, new FileStream(newFile, FileMode.Create, FileAccess.Write));
        pdfWriterD.SetPdfVersion(PdfWriter.PDF_VERSION_1_7);
        document.Open();
        PdfContentByte pdfContentByteD = pdfWriterD.DirectContent;

        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

        int n = pdfReaderS.NumberOfPages;

        string text = "UNCONTROLLED";

        for (int i = 1; i <= n; i++)
        {
            iTextSharp.text.Rectangle pageSizeS = pdfReaderS.GetPageSizeWithRotation(i);
            float pageWidth = pageSizeS.Width / 2;
            float pageheight = pageSizeS.Height / 2;

            document.SetPageSize(pageSizeS);
            document.NewPage();
            PdfImportedPage pdfImportedPage = pdfWriterD.GetImportedPage(pdfReaderS, i);

            PdfLayer layer1 = new PdfLayer("Watermark", pdfWriterD);
            layer1.SetPrint("Watermark", true);
            layer1.View = false;
            layer1.On = false;
            layer1.OnPanel = false;

            pdfContentByteD.BeginLayer(layer1);
            pdfContentByteD.SetColorFill(BaseColor.RED);
            pdfContentByteD.SetFontAndSize(bf, 30);

            ColumnText.ShowTextAligned(pdfContentByteD, Element.ALIGN_CENTER, new Phrase(text), 300, 700, 0);
            pdfContentByteD.EndLayer();

            pdfContentByteD.AddTemplate(pdfImportedPage, 0, 0);//, 0, 1, 0, 0);

        }
        document.Close();
        pdfReaderS.Close();
于 2015-08-14T18:18:10.277 に答える
1

画面が RGB を使用し、プリンターが CMYK を使用しているという事実を利用する必要があります。同じ RGB 値にマッピングされる CMYK で 2 つの色を作成できるはずです。もちろん、これは断固たる専門家に対しては十分ではありません。

于 2010-01-07T19:30:08.560 に答える