Мы заметили, что вы работаете с устаревшей версией API, поэтому, пожалуйста, обновите Aspose.PDF для .NET 19.2, которая является последней доступной версией API, поскольку она включает больше функций и исправлений ошибок. Вы можете использовать приведенный ниже фрагмент кода, чтобы добавить таблицу на страницу документа PDF, одновременно устанавливая границы для всех ячеек.
// Load source PDF document
Aspose.Pdf.Document document = new Aspose.Pdf.Document();
// Add a page to the document
Page page = document.Pages.Add();
// Initializes a new instance of the Table
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// Set the table border color as LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Set the border for table cells
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Create a loop to add 10 rows
for (int row_count = 1; row_count <= 10; row_count++)
{
// Add row to table
Aspose.Pdf.Row row = table.Rows.Add();
// Add table cells
row.Cells.Add("Column (" + row_count + ", 1)");
row.Cells.Add("Column (" + row_count + ", 2)");
}
// Add table object to first page of input document
page.Paragraphs.Add(table);
// Save updated document containing table object
document.Save(dataDir + "Table_19.2.pdf");
Сгенерированный PDF документ был приложен для вашей ссылки Table19.2.pdf . Пожалуйста, не стесняйтесь сообщить нам, если вам нужна дополнительная помощь.
PS: Я работаю с Aspose в качестве разработчика Evangelist.
Я получил ответ от Мартина Хоннена в формате XML и .NET Framework MSDN Forum. Короче говоря, он предлагает использовать функцию глубокого равенства XQuery 1.0 и предлагает несколько реализаций C #. Кажется, работает.
Я знаю, что вы сосредоточены не на модульных тестах, но XMLUnit может сравнивать два файла XML, и я думаю, что он способен решить ваш пример. Может быть, вы могли бы взглянуть на код и выяснить ваше решение.
Может быть, стоит загрузить экземпляры XmlDocument из каждого файла XML и сравнить вместо этого XML DOM? Обеспечение правильной проверки выполняется для каждого, что должно дать вам общую основу для сравнения и должно позволять стандартную отчетность о различиях. Возможно, даже возможность обновлять одно из другого с помощью дельты.
Эти документы не являются семантически эквивалентными. Элемент верхнего уровня первого находится в пространстве имен http: // myNS
, а элемент второго уровня находится в пространстве имен по умолчанию.
Дочерний элемент Элементы двух документов эквивалентны. Но сами документы не являются.
Редактировать:
Существует большая разница между xmls: ns = 'http: // myNS'
и xmlns = 'http: // myNS '
, который я, кажется, упустил из виду. В любом случае, эти документы семантически эквивалентны, и я просто ошибаюсь.
Документы изоморфны, как показано в программе ниже. Я думаю, что если вы используете XmlDiffOptions.IgnoreNamespaces
и XmlDiffOptions.IgnorePrefixes
для настройки Microsoft.XmlDiffPatch.XmlDiff
, вы получите желаемый результат.
using System.Linq;
using System.Xml.Linq;
namespace SO_794331
{
class Program
{
static void Main(string[] args)
{
var docA = XDocument.Parse(
@"<root xmlns:ns=""http://myNs""><ns:child>1</ns:child></root>");
var docB = XDocument.Parse(
@"<root><child xmlns=""http://myNs"">1</child></root>");
var rootNameA = docA.Root.Name;
var rootNameB = docB.Root.Name;
var equalRootNames = rootNameB.Equals(rootNameA);
var descendantsA = docA.Root.Descendants();
var descendantsB = docB.Root.Descendants();
for (int i = 0; i < descendantsA.Count(); i++)
{
var descendantA = descendantsA.ElementAt(i);
var descendantB = descendantsB.ElementAt(i);
var equalChildNames = descendantA.Name.Equals(descendantB.Name);
var valueA = descendantA.Value;
var valueB = descendantB.Value;
var equalValues = valueA.Equals(valueB);
}
}
}
}