Tôi đã tìm thấy công cụ dòng lệnh, diff-pdf. So sánh 2 tệp PDF và trả về mã thoát 0 nếu chúng giống nhau, 1 nếu chúng khác nhau. Tải xuống + trích xuất + thêm nó vào PATH của bạn.
Nhược điểm - nó phải hiển thị cả hai tệp PDF để thực hiện sự khác biệt. Nếu chúng lớn, thì bạn sẽ đạt được thành công.
Người phê duyệt (dựa rất nhiều vào ApprovalTests.Approvers.FileApprover
):
public class DiffPdfApprover : IApprovalApprover
{
public static void Verify(byte[] bytes)
{
var writer = new ApprovalTests.Writers.BinaryWriter(bytes, "pdf");
var namer = ApprovalTests.Approvals.GetDefaultNamer();
var reporter = ApprovalTests.Approvals.GetReporter();
ApprovalTests.Core.Approvals.Verify(new DiffPdfApprover(writer, namer), reporter);
}
private DiffPdfApprover(IApprovalWriter writer, IApprovalNamer namer)
{
this.writer = writer;
this.namer = namer;
}
private readonly IApprovalNamer namer;
private readonly IApprovalWriter writer;
private string approved;
private ApprovalException failure;
private string received;
public virtual bool Approve()
{
string basename = string.Format(@"{0}\{1}", namer.SourcePath, namer.Name);
approved = Path.GetFullPath(writer.GetApprovalFilename(basename));
received = Path.GetFullPath(writer.GetReceivedFilename(basename));
received = writer.WriteReceivedFile(received);
failure = Approve(approved, received);
return failure == null;
}
public static ApprovalException Approve(string approved, string received)
{
if (!File.Exists(approved))
{
return new ApprovalMissingException(received, approved);
}
var process = new Process();
//settings up parameters for the install process
process.StartInfo.FileName = "diff-pdf";
process.StartInfo.Arguments = String.Format("\"{0}\" \"{1}\"", received, approved);
process.Start();
process.WaitForExit();
if (process.ExitCode != 0)
{
return new ApprovalMismatchException(received, approved);
}
return null;
}
public void Fail()
{
throw failure;
}
public void ReportFailure(IApprovalFailureReporter reporter)
{
reporter.Report(approved, received);
}
public void CleanUpAfterSucess(IApprovalFailureReporter reporter)
{
File.Delete(received);
if (reporter is IApprovalReporterWithCleanUp)
{
((IApprovalReporterWithCleanUp)reporter).CleanUp(approved, received);
}
}
}
Để Verify:
DiffPdfApprover.Verify(pdfBytes);
diff-pdf có thể trực quan cho thấy diffs là tốt. Tôi đã cuộn một phóng viên cho điều này, nhưng không sử dụng nó nhiều. Tôi nghĩ rằng nó sẽ có ích nếu có hồi quy sau khi dev báo cáo ban đầu (đó là nơi tôi đang ở ngay bây giờ).
public class DiffPdfReporter : GenericDiffReporter
{
private static readonly string Path = FindFullPath("diff-pdf.exe");
public DiffPdfReporter() : base(Path,
GetArgs(),
"Please put diff-pdf.exe in your %PATH%. https://github.com/vslavik/diff-pdf. And restart whatever's running the tests. Everything seems to cache the %PATH%.") { }
private static string GetArgs()
{
return "--view \"{0}\" \"{1}\"";
}
private static string FindFullPath(string programInPath)
{
foreach (var path in from path in Environment.GetEnvironmentVariable("path").Split(';')
select path)
{
var fullPath = System.IO.Path.Combine(path, programInPath);
if (File.Exists(fullPath))
return fullPath;
}
return null;
}
}
Nguồn
2013-06-27 04:32:49
Brilliant, nhờ Llewellyn, cũng đã có một ngày và Id tài liệu sửa đổi được tạo ra bởi tôi pdf-máy phát điện (iTextSharp), phải thêm chúng quá. – joeriks