Потяните прямоугольник в документе в формате PDF с помощью iText

В то время как я уважаю Cedric, он абсолютно неправ в этой проблеме. Сопоставление с образцом Scala может полностью инкапсулироваться от изменений класса при желании. В то время как это верно, что изменение в класс случая потребовал бы изменения любых соответствующих экземпляров сопоставления с образцом, это только при использовании таких классов наивным способом.

сопоставление с образцом Scala всегда делегаты в deconstructor сопутствующего объекта класса. С классом случая автоматически сгенерирован этот deconstructor (наряду с методом фабрики в сопутствующем объекте), хотя все еще возможно переопределить эту автоматически сгенерированную версию. В любом случае можно утверждать полный контроль над процессом сопоставления с образцом, изолируя любые шаблоны от потенциальных изменений в самом классе. Таким образом сопоставление с образцом является просто другим способом получить доступ к данным класса через безопасный фильтр инкапсуляции, точно так же, как любой другой метод.

Так, мнение доктора Odersky было бы тем для доверия здесь, особенно учитывая чистый объем исследования, которое он провел в области объектно-ориентированного программирования и дизайна.

Что касается того, где это должно использоваться, который является полностью согласно вкусу. Если это делает Ваш код более кратким и удобным в сопровождении, используйте его! Иначе не делать. Для большинства объектно-ориентированных программ сопоставление с образцом является ненужным. Однако, после того как Вы начинаете интегрировать более функциональные идиомы (Option, List, и т.д.) я думаю, что Вы найдете, что сопоставление с образцом значительно уменьшит синтаксические издержки, а также повышение уровня безопасности, предлагаемого системой типов. В целом, любое время, Вы хотите извлечь данные, одновременно тестируя некоторое условие (например, извлекая значение от Some), сопоставление с образцом будет, вероятно, полезно.

7
задан Joris Schellekens 28 October 2017 в 10:57
поделиться

2 ответа

Вот решение. Спасибо Дилану МакКлангу.

PdfWriter writer = ...;
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
cb.setColorStroke(Color.black);
cb.rectangle(x,y,x1,y1);
cb.stroke();
cb.restoreState();
11
ответ дан 6 December 2019 в 10:52
поделиться

В версии .NET я просто создаю таблицу с рамкой. Я знаю, что это не Java, но, возможно, следующий код вам поможет.

iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LETTER, 20, 20, 20, 20);
PdfPTable table;
PdfPCell cell;

// single element w/ border
table = new PdfPTable(1);
cell = new PdfPCell(new Phrase("BOLD WORDS", FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 11, Font.BOLD)));
cell.BorderWidth = 2;
cell.Padding = 5;
cell.PaddingTop = 3;
cell.HorizontalAlignment = Element.ALIGN_CENTER;
table.AddCell(cell);
table.SetWidthPercentage(new float[1] { 598f }, PageSize.LETTER);
table.HorizontalAlignment = Element.ALIGN_CENTER;
document.Add(table);
3
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: