3

表示する前にPDFを編集する必要があるプロジェクトに取り組んでいます

私は欲しい

  • 透かしを追加する
  • 編集権限 (「コピー/貼り付け」と「名前を付けて保存」を避けるためにロック)
  • ビューアの設定を編集する

そして、私はそれをしました...そして、元のファイルのリンクが新しいファイルで機能しないことを除いて、正常に動作します...何か考えはありますか?

注:実際、これは私のコードです(私は itextsharp を使用しています)

    private void loadPdf()
    {
        if (Request.QueryString.HasKeys())
        {
            if (Request.QueryString.GetKey(0) == "thepath" && Request.QueryString.GetKey(1) == "isprintable" && Request.QueryString.GetKey(2) == "type")
            {
                #region kuak
                Document doc = new Document();
                PdfReader pdfReader = new PdfReader(Request.QueryString["thepath"]);
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    PdfWriter pdfWriter = PdfWriter.GetInstance(doc, memoryStream);
                    pdfWriter.ViewerPreferences = PdfWriter.PageModeUseOutlines;
                    //pdfWriter.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft;  /// Despliega el docuemnto en pares de hojas
                    pdfWriter.ViewerPreferences = PdfWriter.PageLayoutOneColumn;
                    pdfWriter.ViewerPreferences = PdfWriter.HideToolbar;
                    //pdfWriter.ViewerPreferences = PdfWriter.HideWindowUI; /// quita los scrollbars y el panel de la derecha qur contiene los bookmarks y las buskedas dentro del pdf
                    if (Request.QueryString["isprintable"] == "n")
                    {
                        pdfWriter.ViewerPreferences = PdfWriter.HideMenubar;
                        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                        pdfWriter.SetEncryption(null, encoding.GetBytes("mYpAssss"), 0, PdfWriter.STRENGTH40BITS);
                    }
                    doc.Open();
                    PdfContentByte pdfContentByte = pdfWriter.DirectContent;
                    doc.AddDocListener(pdfWriter);
                    for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                    {
                        //doc.SetPageSize(pdfReader.GetPageSize(page));
                        doc.SetPageSize(pdfReader.GetPageSizeWithRotation(page));
                        doc.NewPage();
                        PdfImportedPage pdfImportedPage = pdfWriter.GetImportedPage(pdfReader, page);
                        int rot = pdfReader.GetPageRotation(page);
                        if (rot == 90 || rot == 270)
                            pdfContentByte.AddTemplate(pdfImportedPage, 0, -1.0F, 1.0F, 0, 0, pdfReader.GetPageSizeWithRotation(page).Height);
                        else
                            pdfContentByte.AddTemplate(pdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0);
                        string theId = findId();
                        if (isWatermarkNeeded(theId))
                        {
                            #region ADD TEXT WATERMARK
                            //pdfContentByte.BeginText();
                            //iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSizeWithRotation(page);
                            //BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, System.Text.Encoding.ASCII.EncodingName, false);
                            //pdfContentByte.SetFontAndSize(baseFont, 200);
                            //BaseColor baseColor = new BaseColor(255, 0, 0, 20);
                            //pdfContentByte.SetColorFill(baseColor);
                            //float textAngle = (float)GetHypotenuseAngleInDegreesFrom(pageSize.Height, pageSize.Width);
                            //pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "DRAFT", 350, pageSize.Height / 2, textAngle);
                            //pdfContentByte.EndText();
                            #endregion
                            #region ADD IMAGE WATERMARK

                            string fechaExp = "Este documento vence: " + GetExpirationDate(theId).ToShortDateString();
                            pdfContentByte.BeginText();
                            //iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/watermark3.png"));
                            iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(ImageCheck.CreatePicture(@"C:\Users\myUser\Desktop\watermark.png", fechaExp).ToArray());
                            img.SetAbsolutePosition(0, 0);
                            pdfContentByte.AddImage(img);
                            pdfContentByte.EndText();
                            #endregion
                        }

                    }
                    pdfReader.Close();
                    doc.Close();
                    byte[] content = memoryStream.ToArray();
                    Response.ContentType = "application/pdf";
                    Response.AddHeader("content-length", content.Length.ToString());
                    Response.BinaryWrite(content);
                }
                #endregion
            }
            else
            {
                //hay querystring pro no corresponden con los que se necesita
            }
        }
        else
        {
            //no se enviaron los querystring
        }


    }
4

1 に答える 1