मुझे एक कमांड लाइन उपकरण, diff-pdf मिला। 2 पीडीएफ की तुलना करता है और अगर वे वही हैं, तो 1 से बाहर निकलने के लिए बाहर निकलें कोड 0 लौटाता है। डाउनलोड + निकालें + इसे अपने पथ में जोड़ें।
डाउनसाइड - इसे diff करने के लिए दोनों पीडीएफ प्रस्तुत करना होगा। अगर वे बड़े हैं, तो perf हिट।
स्वीकृति प्रदान करने वाले (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);
}
}
}
सत्यापित करें करने के लिए:
DiffPdfApprover.Verify(pdfBytes);
diff-पीडीएफ नेत्रहीन के साथ-साथ शो डिफ कर सकते हैं। मैंने इसके लिए एक रिपोर्टर लुढ़का, लेकिन इसका अधिक उपयोग नहीं किया। मुझे लगता है कि अगर शुरुआती रिपोर्ट देव (जहां मैं अभी हूं) के बाद रिग्रेशन हैं तो यह आसान होगा।
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;
}
}
स्रोत
2013-06-27 04:32:49
शानदार, धन्यवाद लेवेलिन, वहाँ भी था मेरी पीडीएफ-जनरेटर (iTextSharp), के द्वारा बनाई गई एक संशोधित तिथि और दस्तावेज़ आईडी उन्हें जोड़ने के लिए किया था भी। – joeriks