iText là một thư viện Java có sẵn và miễn phí để tạo các tệp PDF. iText cũng có phiên bản .NET cũng được gọi là iText.
Trong bài viết này, mình sẽ hướng dẫn bạn giải quyết vấn đề merge 2 file bị giới hạn Permission, chỉ cho phép AllowPrinting
Bao gồm các bước:
- Tạo Console Application
- Thêm thư viện iText
- Tạo encrypt PDF file
- Merge file
.NET
Tạo Console Application (version .NET 7), cài đặt package iText7
dotnet add package itext7
Tạo 2 file PDF: 1 file giới hạn permission, 1 file không giới hạn permission
static void CreateEncryptFile(string filepath)
{
var ownerPassword = "owner";
var writer = new PdfWriter(filepath,
new WriterProperties()
.SetStandardEncryption(
null,
Encoding.ASCII.GetBytes(ownerPassword),
EncryptionConstants.ALLOW_PRINTING | iText.Kernel.Pdf.EncryptionConstants.ALLOW_FILL_IN,
EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA));
var pdfDoc = new PdfDocument(writer);
var doc = new Document(pdfDoc);
doc.Add(new Paragraph("Hello World! This is an encryption file"));
doc.Close();
}
static void CreateUnencryptFile(string filepath)
{
var writer = new PdfWriter(filepath);
var pdfDoc = new PdfDocument(writer);
var doc = new Document(pdfDoc);
doc.Add(new Paragraph("Hello World!"));
doc.Close();
}
Phương thức SetUnethicalReading được sử dụng để đọc các tệp PDF được bảo vệ bằng mật khẩu mà không cần cung cấp mật khẩu
static PdfReader ReadFile(string filePath)
{
var reader = new PdfReader(filePath);
reader.SetUnethicalReading(true);
return reader;
}
Bạn viết thêm hàm MergeFile, sử dụng function ReadFile
static void MergeFile(string filePath1, string filePath2)
{
var pdf1 = ReadFile(filePath1);
var dest = @"Files\result.pdf";
var pdf = new PdfDocument(new PdfWriter(dest));
var merger = new PdfMerger(pdf);
//Add pages from the first document
var firstSourcePdf = new PdfDocument(pdf1);
merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());
//Add pages from the second pdf document
var pdf2 = ReadFile(filePath2);
PdfDocument secondSourcePdf = new PdfDocument(pdf2);
merger.Merge(secondSourcePdf, 1, secondSourcePdf.GetNumberOfPages());
//Close the documents
firstSourcePdf.Close();
secondSourcePdf.Close();
pdf.Close();
}
Ở hàm main, gọi hàm MergeFile
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using iText.Layout.Element;
using System.Text;
using iText.Layout;
var file1 = "Files\\file1.pdf";
var file2 = "Files\\file2.pdf";
try
{
CreateEncryptFile(file1);
CreateEncryptFile(file2);
MergeFile(file1, file2);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
.NET Framework
Bạn thêm dòng code sau trước khi mở file PDFPdfReader.unethicalreading = true;
Chúc các bạn thành công
Nhatkyhoctap's blog
Nhận xét
Đăng nhận xét