Имеется 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;
}
Авторизуйтесь, чтобы написать комментарий