Записная книжка разработчика. Штрихкод в pdf-версии документа с защитой

10 0

Имеется pdf-версия документа. Нужна защита - запрет печати, копирования, выделения текста, подписания, др. И нужно вставить в него штирхкод о регистрации. Как быть? 

Для вставки штрихкода следующего формата в pdf можно использовать библиотеку iText7 (новая версия iTextSharp)


 

Доступна установка защиты в pdf (запрет печати, копирования, выделения текста, подписания, др.)


 

using iText.Barcodes;
using iText.Kernel.Colors;
using iText.Kernel.Pdf;
using iText.Kernel.Geom;
using iText.Kernel.Font;
public static System.IO.Stream GetPDFWithBarcodeStream(System.IO.Stream pdfStream, int documentId, bool onlyPrintingPDF)
    {
      Logger.DebugFormat("GetPDFWithBarcodeStream start for document id = '{0}'", documentId);
      var resultStream = new MemoryStream();
      var reader = new PdfReader(pdfStream);
      reader.SetUnethicalReading(true);
      
      var allows = EncryptionConstants.ALLOW_PRINTING |
        EncryptionConstants.ALLOW_SCREENREADERS |
        EncryptionConstants.ALLOW_MODIFY_ANNOTATIONS;

      var writer = onlyPrintingPDF
        ? new PdfWriter(resultStream, new WriterProperties().SetStandardEncryption(new byte[0], Encoding.ASCII.GetBytes("password"), allows, EncryptionConstants.ENCRYPTION_AES_256))
        : new PdfWriter(resultStream);

      var pdf = new PdfDocument(reader, writer);
      var document = new iText.Layout.Document(pdf);
      
      // Формирование штрихкода.
      var barcode = new Barcode128(pdf);
      var tenantId = Sungero.Docflow.PublicFunctions.Module.Remote.GetCurrentTenantId();
      var formattedTenantId = Sungero.Docflow.PublicFunctions.Module.FormatTenantIdForBarcode(tenantId);
      var barcodeString = string.Format("{0} - {1}", formattedTenantId.Trim(), documentId);
      barcode.SetAltText(string.Format("ООО Ромашка - {0}", documentId));
      barcode.SetCode(barcodeString);
      
      // Вставка штрихкода в тело pdf.
      Logger.DebugFormat("GetPDFWithBarcodeAndConfidentialityCodeStream try add Barcode for document id = '{0}'", documentId);
      for (int i = 1; i <= pdf.GetNumberOfPages(); i++)
      {
        var canvas = new iText.Kernel.Pdf.Canvas.PdfCanvas(pdf.GetPage(i));
        var barcodeFormXObject = barcode.CreateFormXObject(ColorConstants.BLACK, ColorConstants.BLACK, pdf);
        canvas.AddXObjectWithTransformationMatrix(barcodeFormXObject, 1, 0, 0, 1, 240, 10);
      }
      
      writer.SetCloseStream(false);
      document.Close();

      return resultStream;
    }

 

10
Авторизуйтесь, чтобы оценить материал.
3
Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий