На Linux можно преобразовать файлы PDF в Постскриптум и использование psnup
. Точный способ вызвать его зависит от точно, как Вы хотите, чтобы страницы были соединены, хотите ли Вы их повернутый, какой формат (форматы) бумаги Вы хотите использовать, и т.д. но это будет что-то вроде этого:
pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf
В зависимости от того, какие инструменты Вы имеете в наличии, у Вас мог бы быть более эффективный способ сделать, это - psnup
является, конечно, не единственным путем, но это - относительно известная программа (на Linux так или иначе).
Я предполагаю, что вы применили WebScriptEnhibitedBehavior (элемент enableWebScript в .config)? Это приводит к тому, что все запросы заключаются в объект JSON с одним полем с именем «d», которое затем содержит объект с вашими именованными параметрами. Поэтому вам нужно будет изменить данные jQuery на:
data: "{d:{logonRequest:" + JSON.stringify(LogonRequest) + "}}"
Либо это, либо удалить поведение enableWebScript, но, если вы это сделаете, вы должны вместо этого применить поведение webHttp. Теперь, к сожалению, кодировка по умолчанию - это XML, и поведение не предлагает никаких переключателей для управления кодировкой для всей службы (плохой дизайн MSFT). Итак, либо вы должны жениться на отдельной кодировке для каждого метода, задав свойства Request / ResponseFormat, либо, как я справлялся с этим в прошлом, я создал "EnhancedWebHttpElement" который применяет тот же WebHttpBehavior, но дает возможность управлять различными свойствами на уровне конфигурации. Преимущество использования этой конфигурации заключается в том, что теперь вы можете предоставлять доступ к одной и той же службе WCF через разные конечные точки, используя кодировку ASP.NET AJAX на одной, простой JSON на другой и, возможно, даже POX на другой.
Вот код:
public sealed class EnhancedWebHttpElement : BehaviorExtensionElement
{
#region Type specific properties
[ConfigurationProperty("defaultBodyStyle", DefaultValue=WebMessageBodyStyle.Bare)]
public WebMessageBodyStyle DefaultBodyStyle
{
get
{
return (WebMessageBodyStyle)this["defaultBodyStyle"];
}
set
{
this["defaultBodyStyle"] = value;
}
}
[ConfigurationProperty("defaultOutgoingRequestFormat", DefaultValue=WebMessageFormat.Xml)]
public WebMessageFormat DefaultOutgoingRequestFormat
{
get
{
return (WebMessageFormat)this["defaultOutgoingRequestFormat"];
}
set
{
this["defaultOutgoingRequestFormat"] = value;
}
}
[ConfigurationProperty("defaultOutgoingResponseFormat", DefaultValue=WebMessageFormat.Xml)]
public WebMessageFormat DefaultOutgoingResponseFormat
{
get
{
return (WebMessageFormat)this["defaultOutgoingResponseFormat"];
}
set
{
this["defaultOutgoingResponseFormat"] = value;
}
}
#endregion
#region Base class overrides
protected override object CreateBehavior()
{
WebHttpBehavior result = new WebHttpBehavior();
result.DefaultBodyStyle = this.DefaultBodyStyle;
result.DefaultOutgoingRequestFormat = this.DefaultOutgoingRequestFormat;
result.DefaultOutgoingResponseFormat = this.DefaultOutgoingResponseFormat;
return result;
}
public override Type BehaviorType
{
get
{
return typeof(WebHttpBehavior);
}
}
#endregion
}
И затем вы должны зарегистрировать его:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="enhancedWebHttp" type="MyNamespace.EnhancedWebHttpElement, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
А затем вы используете его так:
<behavior name="MyBehavior">
<enhancedWebHttp defaultOutgoingRequestFormat="JSON" defaultOutgoingResponseFormat="JSON" />
</behavior>
ОБНОВЛЕНИЕ:
Этот ответ выше относится строго к .NET 3.x. Если вы используете .NET 4.x, то теперь вы можете использовать свойство DefaultOutgoingResponseFormat
, которое отображается в WebHttpElement
, чтобы управлять этим. Даже лучше,