Я был вдохновлен ответом команды PDFsharp, чтобы попытаться заполнить ячейку пустым изображением гиперссылки с текстом поверх гиперссылки. Поскольку моей конечной целью было превратить всю строку в гиперссылку, я придумал следующее решение.
Во-первых, добавьте дополнительный столбец нулевой ширины перед первым столбцом в таблице, который вы хотите использовать в качестве гиперссылки. Затем добавьте абзац, гиперссылку и прозрачное 1-пиксельное изображение в каждую ячейку нулевой ширины. Укажите высоту и ширину изображения, чтобы заполнить любое количество ячеек таблицы, которое вы хотите использовать в качестве ссылки. Кроме того, не забудьте установить размер шрифта абзаца, содержащего ссылку, почти равным нулю (ноль генерирует исключение, но изображения выравниваются по базовой линии шрифта, поэтому вам нужно очень маленькое число, чтобы абзац не был больше изображения). ).
Обратите внимание, что столбец нулевой ширины, даже с границами, не меняет видимую ширину границы при просмотре результирующего PDF-файла. Следующий код иллюстрирует мой подход:
// Declare some constants
var _rowHeight = new Unit(.75, UnitType.Centimeter);
// Create the document, section, and table
var document = new Document();
var section = document.AddSection();
var table = section.AddTable();
// Format the table
table.Rows.Height = _rowHeight;
table.Rows.VerticalAlignment = VerticalAlignment.Center;
// Define the column titles and widths
var columnInfos = new[] {
new { Title = "Non-Link Column", Width = new Unit(8, UnitType.Centimeter) },
new { Title = "" , Width = new Unit(0 ) },
new { Title = "Link Column 1" , Width = new Unit(8, UnitType.Centimeter) },
new { Title = "Link Column 2" , Width = new Unit(8, UnitType.Centimeter) },
};
// Define the column indices
const int colNonLink = 0;
const int colHyperlink = 1;
const int colLink1 = 2;
const int colLink2 = 3;
// Create all of the table columns
Unit tableWidth = 0;
foreach (var columnInfo in columnInfos)
{
table.AddColumn(columnInfo.Width);
tableWidth += columnInfo.Width;
}
// Remove the padding on the link column
var linkColumn = table.Columns[colHyperlink];
linkColumn.LeftPadding = 0;
linkColumn.RightPadding = 0;
// Compute the width of the summary links
var linkWidth = tableWidth -
columnInfos.Take(colHyperlink).Sum(ci => ci.Width);
// Create a row to store the column headers
var headerRow = table.AddRow();
headerRow.Height = ".6cm";
headerRow.HeadingFormat = true;
headerRow.Format.Font.Bold = true;
// Populate the header row
for (var colIdx = 0; colIdx < columnInfos.Length; ++colIdx)
{
var columnTitle = columnInfos[colIdx].Title;
if (!string.IsNullOrWhiteSpace(columnTitle))
{
headerRow.Cells[colIdx].AddParagraph(columnTitle);
}
}
// In the real code, the following is done in a loop to dynamically add rows
var row = table.AddRow();
// Populate the row header
row.Cells[colNonLink].AddParagraph("Not part of link");
// Change the alignment of the link cell
var linkCell = row.Cells[colHyperlink];
linkCell.VerticalAlignment = VerticalAlignment.Top;
// Add a hyperlink that fills the remaining cells in the row
var linkParagraph = linkCell.AddParagraph();
linkParagraph.Format.Font.Size = new Unit(.001, UnitType.Point);
var hyperlink = linkParagraph.AddHyperlink("MyBookmarkName");
var linkImage = hyperlink.AddImage("Transparent.gif");
linkImage.Height = _rowHeight;
linkImage.Width = linkWidth;
// Populate the remaining two cells
row.Cells[colLink1].AddParagraph("Part of link 1");
row.Cells[colLink2].AddParagraph("Part of link 2");
// Add a border around the cells
table.SetEdge(0, 0, columnInfos.Length, table.Rows.Count,
Edge.Box | Edge.Interior, BorderStyle.Single, .75, Colors.Black);
Результатом приведенного выше кода является документ, содержащий таблицу с 2 строками и 3 видимыми столбцами, где все последние две ячейки в последней строке являются гиперссылкой на «MyBookmarkName». Просто для справки: я изменил исходный код PDFSharp в соответствии с советом здесь для удаления границ вокруг гиперссылок, которые выглядели шатко при определенных уровнях масштабирования в Adobe Acrobat Reader.
person
Jeff G
schedule
09.04.2015