小编han*_*rld的帖子

如何在现有PDF中嵌入字体?

背景:

我有PDF,我是以编程方式生成的.我需要能够从服务器直接将PDF发送到打印机(而不是通过中间应用程序).目前我可以完成上述所有操作(生成PDF,发送到打印机),但由于字体未嵌入PDF中,因此打印机正在进行字体替换.

生成时为什么不嵌入字体:

我正在使用SQL Reporting Services 2008创建PDF .SQL Reporting Services存在一个已知问题,即它不会嵌入字体(除非满足一系列要求 - http://technet.microsoft.com/en-us/library /ms159713%28SQL.100%29.aspx).不要问我为什么,PDF符合MS列出的所有要求,并且字体仍然显示为未嵌入 - 没有真正控制字体是否嵌入,所以我已经接受这不起作用并继续前进.Microsoft提供的建议解决方法(http://blogs.msdn.com/b/donovans/archive/2007/07/20/reporting-services-pdf-renderer-faq.aspx "何时将使用Reporting Services进行字体嵌入")是发布处理PDF以手动嵌入字体.

目标 获取已生成的PDF文档,以编程方式"打开"它并嵌入字体,重新保存PDF.

方法 我指向iTextSharp,但大多数示例都是针对Java版本的,我在转换到iTextSharp版本时遇到问题(我找不到任何iTextSharp文档).

我正在撰写这篇文章以了解我需要做的事情:Itext将字体嵌入PDF中.

但是对于我的生活,我似乎无法使用ByteArrayOutputStream对象.它似乎无法找到它.我已经研究过并且研究过但似乎没有人说出它在哪个类或我找到它的位置所以我可以将它包含在using语句中.我甚至破解了开放的Reflector,似乎无法在任何地方找到它.

这是我到目前为止,它编译等等.(结果是我生成的PDF的字节[]).

PdfReader pdf = new PdfReader(result);            
BaseFont unicode = BaseFont.CreateFont("Georgia", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// the next line doesn't work as I need a ByteArrayOutputStream variable to pass in
PdfStamper stamper = new PdfStamper(pdf, MISSINGBYTEARRAYOUTPUTSTREAMVARIABLE);
stamper.AcroFields.SetFieldProperty("test", "textfont", unicode, null); 
stamper.Close();
pdf.Close();
Run Code Online (Sandbox Code Playgroud)

那么有人可以帮我使用iTextSharp将字体嵌入PDF或指向正确的方向吗?

我非常乐意使用除iTextSharp之外的任何其他解决方案来完成此目标,但它需要是免费的,并且能够被企业用于内部应用程序(即Affero GPL).

c# pdf ghostscript itextsharp embedded-fonts

28
推荐指数
2
解决办法
2万
查看次数

如何通知 Slack 上不在频道中的用户?

我们正在努力做什么

我正在研究自动化,它使用自定义 Slack 应用程序上的传入 Webhooks将消息发布到 Slack 通道。这些消息提到了人。

什么有效

我们可以很好地发送一条消息,它具有格式化的内容,并且使用link-names flag正确解析了用户名。

成功发布消息并标记人员

什么不起作用

通知的全部目的是告知一群动态的人们他们应该关心的事情。我们标记的人群差异很大(想想那些为拉取请求做出贡献的人),因此并非所有可能的收件人都在这些自动消息发送的渠道中。

我们假设,鉴于用户名被直接@提及,Slack 会通知他们。然而,我们测试过并@提及的两名用户确认他们从未收到过他们被标记的通知。

这与“人类”行为不同,如果您在 Slack 中@提及某人,您会收到一条小消息,提醒您该人不在该频道中,并提出邀请他们或让他们知道。

提及不在频道中的用户的示例

据我们所知,以编程方式发送消息相当于上图中的“不执行任何操作”。我想做其他两个选项之一,最好是“让他们知道”。

我如何通知人们他们被提及?我查看了所有 API 文档,没有讨论通知不在他们提到的频道中的用户。

这不是一个罕见的问题......对吧?

笔记:

  • 我们不是直接调用chat.postMessage,它只是我能找到链接到的关于 link_names 的唯一文档。我们正在使用 Incoming Webhooks,它对参数的文档很少 - 它似乎与chat.postMessage.
  • 我们不想删除传入的 Webhooks,但如果需要,我们可以与 API 进行自定义集成。

slack-api slack

10
推荐指数
1
解决办法
2697
查看次数

使用SSIS将不同的csv文件加载到不同的SQL Server表中的最佳方法是什么?

我应该重复使用相同的平面文件连接管理器,还是应该为要导入的每个文件放置单独的平面文件连接管理器?

描述:

我有30个不同结构的CSV文件,我需要将这些文件导入SQL Server数据库.

目前,我正在为每个平面文件源使用单独的平面文件连接管理器.然后使用OLEDB Destination将数据推送到SQL Server数据库.

我应该重用相同的平面文件连接管理器吗?

你能指导我 - 怎么做?任何链接都会有所帮助.

sql-server csv ssis ssdt-bi

2
推荐指数
1
解决办法
1224
查看次数

IdentityServer4-缺少Google的声明

TLDR;在使用IdentityServer4的上下文中

  1. 您如何从Google获得电子邮件地址和高清声明?
  2. 如何获取要填充的User.Identity.Name?

我已经完成了IdentityServer 快速入门,并且有一个正在工作的MVC客户端与IdentityServer实例进行对话(如果使用错误的术语,则表示歉意)。我正在使用外部身份验证(Google),并且没有任何复杂的问题,例如本地登录名/数据库等。我没有在使用ASP.NET Identity。这一切都很好。

我可以在我的MVC应用中成功进行身份验证,并且以下代码在以下屏幕截图中产生了声明:

@foreach (var claim in User.Claims)
{
    <dt>@claim.Type</dt>
    <dd>@claim.Value</dd>
}
<dt>Identity.Name</dt>
<dd>&nbsp;@User.Identity.Name</dd>

<dt>IsAuthenticated</dt>
<dd>@User.Identity.IsAuthenticated</dd>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

问题:

  1. 我无法从Google检索其他索赔(正确的字词?)。特别是“ hd”或“ email”-请注意,它们没有出现在上述屏幕截图的声明中。如何获得Google的电子邮件地址和高清声明?我想念什么或做错什么?
  2. 请注意,User.Identity.Name的输出为空。为什么会这样,如何填充呢?这似乎是未设置的User.Identity的唯一属性。

我的设置如下-您可以看到上面的输出:

客户(MVC)

在Startup.cs中,ConfigureServices

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
    options.SignInScheme = "Cookies";
    options.Authority = Configuration["App:Urls:IdentityServer"];
    options.RequireHttpsMetadata = false;
    options.Resource = "openid profile email";
    options.Scope.Add("openid");
    options.Scope.Add("profile");
    options.Scope.Add("email");
    options.Scope.Add("domain");
    options.ClientId = "ctda-web";
    options.SaveTokens = true;
    options.GetClaimsFromUserInfoEndpoint = true;
});
Run Code Online (Sandbox Code Playgroud)

身份服务器

客户定义

// OpenID …
Run Code Online (Sandbox Code Playgroud)

c# google-oauth asp.net-core identityserver4

2
推荐指数
1
解决办法
1531
查看次数