C# iText7: как удалить все короткие горизонтальные линии из PDFC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# iText7: как удалить все короткие горизонтальные линии из PDF

Сообщение Anonymous »

Я хочу удалить все короткие горизонтальные строки из файла PDF. Образец PDF: < /p>
string outputPath = "output.pdf";
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdfDoc = new PdfDocument(writer))
{
pdfDoc.SetDefaultPageSize(PageSize.A4);
Document document = new Document(pdfDoc);
document.Add(new Paragraph("This is the first paragraph").SetFontSize(12));
document.Add(new Paragraph("This is the second paragraph, used to test the effect of horizontal lines").SetFontSize(12));
PdfPage page = pdfDoc.GetFirstPage();
PdfCanvas canvas = new PdfCanvas(page);
canvas.SetStrokeColor(ColorConstants.BLACK);
canvas.SetLineWidth(0.5f);
Rectangle pageSize = page.GetPageSize();
float margin = 20;

var x1 = pageSize.GetWidth() / 2f;
var y1 = pageSize.GetTop() - margin;
var x2 = x1;
var y2 = y1 - 10f;
canvas.MoveTo(x1, y1).LineTo(x2, y2).Stroke();
canvas.MoveTo(x1 - 20f, y1).LineTo(x2 - 20f, y2).Stroke();
canvas.MoveTo(x1 + 20f, y1).LineTo(x2 + 20f, y2).Stroke();

canvas.MoveTo(x1 - 5f, y2).LineTo(x1, y2).Stroke();
canvas.MoveTo(x1, y2).LineTo(x1 + 5f, y2).Stroke();

canvas.MoveTo(x1 - 5f, y2).LineTo(x1, y2).Stroke();
canvas.MoveTo(x1, y2).LineTo(x1 + 5f, y2).Stroke();

canvas.MoveTo(x1 - 5f, y2 - 10).LineTo(x1, y2 - 10).Stroke();
canvas.MoveTo(x1, y2 - 10).LineTo(x1 + 5f, y2 - 10).Stroke();

canvas.MoveTo(margin, pageSize.GetTop() - margin)
.LineTo(pageSize.GetRight() - margin, pageSize.GetTop() - margin)
.Stroke();
canvas.MoveTo(margin, pageSize.GetBottom() + margin)
.LineTo(pageSize.GetRight() - margin, pageSize.GetBottom() + margin)
.Stroke();
canvas.MoveTo(pageSize.GetLeft() + margin, pageSize.GetTop() - margin)
.LineTo(pageSize.GetLeft() + margin, pageSize.GetBottom() + margin)
.Stroke();
canvas.MoveTo(pageSize.GetRight() - margin, pageSize.GetTop() - margin)
.LineTo(pageSize.GetRight() - margin, pageSize.GetBottom() + margin)
.Stroke();
canvas.ClosePath();
document.Close();
< /code>
И я могу обнаружить все короткие линии с < /p>
public class LineDetectionListener : IEventListener
{
public List PathsToClean { get; } = new List();
public List PointsToClean { get; } = new List();
public void EventOccurred(IEventData data, EventType type)
{
PathRenderInfo pathRenderInfo = (PathRenderInfo)data;
var points = GetLinePoints(pathRenderInfo);
if (points != default && points[0].GetY() == points[1].GetY())
{
if (points[1].GetX() - points[0].GetX() < 20f)
{
PathsToClean.Add(pathRenderInfo.GetPath());
PointsToClean.Add(points);
}
}
}

private Point[] GetLinePoints(PathRenderInfo pathData)
{
var subpaths = pathData.GetPath().GetSubpaths();
foreach (var subpath in subpaths)
{
var startPoint = subpath.GetStartPoint();
var subpathSegments = subpath.GetSegments();
if (subpathSegments.Count == 1)
{
var destPoint = subpathSegments[0].GetBasePoints()[1];
return new Point[] { startPoint, destPoint };
}
}
return default;
}
public ICollection GetSupportedEvents()
{
return new[] { EventType.RENDER_PATH };
}
}
< /code>
Я знаю, что должен использовать editpagecontent.java, я заметил, что класс EditPageContent в основном полагается на GetGraphicsState для получения таких свойств, как цвет заливки, цвет инсульта, размер шрифта и так далее,
, и теперь я обнаружил короткие горизонтальные линии, но я не знаю, как их снимать с EditPage. много.


Подробнее здесь: https://stackoverflow.com/questions/795 ... from-a-pdf
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»