2016-09-26 3 views
0

Этот вопрос связан (следует из) этого question.Почему существуют пустые строки после моей формы в Word?

Я динамически генерирую документы Word из данных в базе данных. В генерации мне нужно, чтобы Первая страница секции имела отличный верхний край, чем другие страницы в этом разделе. По причине, которая слишком долго объясняла бы, я не могу просто создать новый раздел с другим верхним краем.

Чтобы обойти мою проблему, я подумал, что создам форму (прямоугольник) без рамки и не заполняю (невидимую), которая была высотой, на которой я хотел, чтобы мой край был. Я бы поставил его абсолютно на (0,0). Я также сделал бы wrapTopAndBottom так, чтобы он толкнул текст в теле страницы вниз. Это работает ... за исключением одной маленькой проблемы.

enter image description here

Как вы можете видеть, что есть большая, пустая область сразу после моей формы. Там есть реальные пустые строки. Вы можете видеть линии лучше в этом изображении, где я поместил текст в эти строки.

enter image description here

Когда я смотрю на файл XML заголовка в архиве Word, эти строки не существует. Я не уверен, откуда они берутся или как избавиться от них. Я могу вручную удалить их с помощью Word, но каждый раз, когда я восстанавливаю файл, он возвращается туда. Если кто-то знает, почему это происходит и/или как обойти это, я был бы признателен за помощь.

Спасибо.

+1

Просто с скриншотов трудно понять, что происходит. Можете ли вы поделиться кодом, который генерирует эти документы (пожалуйста, сделайте небольшой воспроизводимый образец) или добавьте ссылку на документы Word? В общем, очень полезно создать документ в Word с желаемым компоновкой/форматированием и использовать Document Reflector, включенный в SDK Open XML, чтобы сгенерировать код C#, который будет создавать этот документ. –

ответ

0

Я, наконец, понял это.

Извините, я не мог опубликовать код здесь. Во-первых, я не использую C#, я использую PHP. Во-вторых, количество кода, которое я должен был бы опубликовать, чтобы показать, как заголовок создается, запрещен на таком форуме. В-третьих, мне не разрешено публиковать код компании здесь.

В любом случае проблема была простой, как только я ее увидел. Мы помещаем в заголовок несколько абсолютно позиционированных объектов (фигуры, текст, изображения и многое другое). В классе, который создает эти объекты, каждый из них помещается внутри элемента <w:p>. Например, если бы было 3 таких объекта, XML выглядел бы так.

<hdr> 
    <p>Some Object</p> 
    <p>Some Object</p> 
    <p>Some Object</p> 
</hdr> 

Проблема заключается в том, что даже если каждый из объектов внутри <p> позиционируется абсолютно, сам <p> элемент создает линию и пространство для этой линии. Таким образом, в заголовке выше было бы три пустые строки. Это стало проблемой, если заголовок имел 6 или 7 объектов, потому что пустые строки подталкивали маркер заголовка вниз и заставляли контент страницы также уменьшаться. Это было нежелательным поведением.

Решение прост. Все абсолютно позиционированные объекты могут быть помещены в один и тот же элемент <p>. Это оставляет только 1 пустую строку в заголовке независимо от того, сколько у вас объектов.